<?php
/**
 * admin service file Created by PhpStorm.
 * User: wumengmeng
 * Date: 2019/08/23
 * Time: 15:42
 */
 
namespace Modules\Admin\Service;

use HiCommon\Repository\AdminsRepository;
use HiCommon\Repository\ShopRepository;
use HiCommon\Repository\EntrustPermissionsRepository;
use HiCommon\Repository\EntrustRoleUserRepository;
use HiCommon\Service\Clear;
use Illuminate\Support\Facades\Hash;

class AdminsService
{

//    /**
//     * 获取所有权限
//     *
//     * @return array
//     * @author wumengmeng <wu_mengmeng@foxmail.com>
//     */
//    public function get_all(){
//        try {
//            $arr_option = ['order'=>['key'=>'id','value'=>'asc']];
//            $data = AdminsRepository::base_get_all($arr_option)->toarray();
//            return  hello_success('成功',$data);
//        } catch (\Exception $exception) {
//            return hello_error('失败',[],$exception->getMessage());
//        }
//    }

//    /**
//     * 验证权限
//     *
//     * @param string $route
//     *
//     * @return array
//     * @author wumengmeng <wu_mengmeng@foxmail.com>
//     */
//    public function authority_auth(string $route)
//    {
//        $n_admin_id = admin_user_id();
//
//        //主页和首页不需要验证权限
//        if ($route == 'admin_index' || $route == 'admin_index_main' || $route == 'admin_login_out') {
//            return  hello_success('主页和首页不需要验证权限');
//        }
//
//        //超级用户admin不需要验证权限 其他用户需验证权限
//        if (is_admin_super() === true) {
//            return  hello_success('超级用户admin不需要验证权限');
//        }
//        else {
//
//            /*//查询权限表中是否添加路由权限
//            $oc_res = collect(get_permission_cache());
//            if (is_null($oc_res->where('alias', $route)
//                                         ->first())) {
//                return hello_error('权限表中未添加路由权限');
//            }*/
//
//            //检查登录用户是否有该权限
//            $oc_res = collect(cache_user_permissions_for_admin($n_admin_id));
//            if (is_null($oc_res->where('alias', $route)
//                                         ->first())) {
//                return hello_error('您没有访问权限！请联系超级管理员');
//            }
//
//        }
//    }

    /**
     * 用户登录
     *
     * @param array  $arr_input
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function login_in(array $arr_input)
    {
        $s_username = str_trim($arr_input['username']);
        $s_password = str_trim($arr_input['password']);
        $arr_where = [
          'username'=>$s_username,
          'phone'=>$s_username,
        ];

        //验证账户
        $res = AdminsRepository::base_get_one_orwhere($arr_where);
        if(is_null($res)){
            return hello_error('用户不存在');
        }
        $arr_admin_user = $res->toarray();
        if($arr_admin_user['pass'] != $s_password){
            return hello_error('密码错误');
        }
        if($arr_admin_user['status'] == 2){
            return hello_error('用户已被禁用');
        }

        $arr_input = [
          'username' => trim((string)$arr_admin_user['username']),
          'password' => trim((string)$s_password)
        ];
        $loginState = AdminsRepository::login_in($arr_input, $arr_input['ip']);
        if ($loginState) {

            //记录登录日志
            $arr_log = [
              'username'=>admin_user()['username'],
              'ip'=> $arr_input['ip'],
              'login_at'=>date('Y-m-d H:i:s')
            ];
            LogService::record_login_in($arr_log);
            return  hello_success('登录成功');
        }
        else {
            return hello_error('登录失败');
        }

    }

    /**
     * 退出登录
     *
     * @return mixed
     * @author wumengmeng <wu_mengmeng@foxmail.com>
     */
    public function login_out()
    {
        try {
            //清理缓存
            $arrData =  ['clear'=>[
              'view',
              'route',
              'cache',
              'config',
              'menu',
            ]];
            Clear::clear_cache_operate($arrData);

            //注销用户
            admin_offset_user();
            return hello_success('退出登录');
        } catch (\Exception $exception) {
            return hello_error('失败',[],$exception->getMessage());
        }
    }
}